import {Alert} from "react-native";
import PasswordEncoder from "./PasswordEncoder";

const loginUrl = "jwt/login";
const getCurrentUserUrl = "security/login/success";
const simulateLoginUrl = "account/simulate/{account}"; //模拟登录
const checkSimulateLoginUrl = "account/simulated"; //判断是否为模拟登录
const exitSimulateLoginUrl = "account/simulate/exit"; //退出模拟登录
const logoutUrl = "jwt/logout"; //退出登录
const bindingUserWithThirdParty = "account/binding/user"; //第三方账号绑定本系统账号
const refreshTokenUrl = "security/auth/refresh/token";

const authentication = {
  // namespaced: true,
  // state: {
  //   rememberMe: 0,
  //   user: null
  // },
  // getters: {
  //   currentDomain: (state) => {
  //     if (state.user === null) {
  //       return "";
  //     }
  //     if (state.user.type === 1) {
  //       return state.user.info.parentOrgAccount;
  //     } else {
  //       return state.user.info.orgAccount.domain;
  //     }
  //   },
  //   agent: (state) => (state.user === null ? null : state.user.info.agent),
  //   account: (state) => (state.user === null ? null : state.user.account),
  //   orgAccount: (state) => {
  //     let result = null;
  //     if (state.user === null || !state.user.info) {
  //       result = {name: "无", domain: "无"};
  //     }
  //     if (state.user.type === 1) {
  //       result = state.user.info.parentOrgAccount;
  //     } else {
  //       result = state.user.info.orgAccount;
  //     }
  //     if (!result) {
  //       result = {name: "无", domain: "无"};
  //     }
  //     return result;
  //   },
  //   nickname: (state) => {
  //     if (state.user === null || !state.user.info) {
  //       return "匿名";
  //     }
  //     if (state.user.type === 1) {
  //       return `组织账号:${state.user.info.name}(${state.user.info.descriptor})`;
  //     } else {
  //       return `${state.user.info.fullName}(${state.user.info.account})`;
  //     }
  //   },
  //   avatar: (state) => (_.isEmpty(state.user) || _.isEmpty(state.user.avatar) ? "" : state.user.avatar),
  //   roles: (state) => (state.user != null ? state.user.roles.map((role) => role.code) : []),
  //   permissions: (state) => {
  //     let result = [];
  //     if (state.user === null) {
  //       return result;
  //     }
  //     state.user.roles.forEach(function (role) {
  //       let permissions = role.permissions.map((permission) => permission.code);
  //       result = result.concat(permissions);
  //     });
  //     result = result.concat(state.user.permissions.map((permission) => permission.code));
  //     return result;
  //   },
  // },
  // mutations: {
  //   SET_USER: (state, user) => {
  //     state.user = user;
  //   },
  //   SET_REMEMBER_ME(state, rememberMe) {
  //     state.rememberMe = rememberMe ? 1 : "0";
  //   },
  // },
  //
  //
  //
  // actions: {
  //   /**
  //    * 判断当前登录用户是否有权限
  //    * @param getters store getter
  //    * @param code 权限编码
  //    * @returns {*|boolean}
  //    */
  //   hasPermission({getters}, code) {
  //     if (!code) {
  //       return true;
  //     }
  //     let codes = code.split(",");
  //     return code && getters.permissions.filter((permission) => codes.indexOf(permission) > -1).length > 0;
  //   },
  //   /**
  //    * 判断当前登录用户是否属于某个角色
  //    * @param getters store geeter
  //    * @param code 角色编码
  //    * @returns {*|boolean}
  //    */
  //   hasRole({getters}, code) {
  //     if (!code) {
  //       return true;
  //     }
  //     let codes = code.split(",");
  //     return code && getters.roles.filter((role) => codes.indexOf(role) > -1).length > 0;
  //   },

  //   setJwtToken({ state }, token) {
  //     if (_.isEmpty(token)) {
  //       localStorage.setItem("JWT_TOKEN", token);
  //       // sessionStorage.setItem("JWT_TOKEN", token);
  //       return;
  //     }
  //     // if (state.rememberMe === 1) {
  //     localStorage.setItem("JWT_TOKEN", token);
  //     // } else {
  //     //   sessionStorage.setItem("JWT_TOKEN", token);
  //     // }
  //   },
    async getCurrentUser(_,account) {
        let respData = await request.get(getCurrentUserUrl);
        if (!respData || respData.redirect) {
            request.AUTHORIZATION = "";
            return;
        }
        if (respData.content && respData.content.redirect && respData.content.httpcode !== 200) {
            //首次登录
            _.props.navigation.navigate('ForgotPassword', {
                account: account,
                firstLogin:true
            });
            return;
        }
      return respData;
    },


    async login(_, {domainCode,account,password,rememberMe}) {
        let username = domainCode + "\\" + account;
        password = PasswordEncoder.encode(username, password);
        let loginParam = {username:username, password:password,rememberMe:rememberMe?1:0};
        try {
            let loginResult = await request.post(loginUrl, loginParam);
            if (!loginResult || loginResult === "") {
                return false;
            }
            request.AUTHORIZATION = loginResult.message;
            if (
                loginResult.content.httpcode &&
                loginResult.content.httpcode === 302
                &&StrUtils.isEmpty(loginResult.message)
            ) {
                //重置密码
                _.props.navigation.navigate('ChangePassword', {
                    account: account
                });
                return false;
            }
            return true;
        } catch (e) {
            Alert.alert(e.message,e.content);
            return false;
        }
    },



  //
  //
  //   async logout({ dispatch, commit, rootState }) {
  //     let simulated = await request.get(checkSimulateLoginUrl);
  //     if (simulated) {
  //       await request.post(exitSimulateLoginUrl);
  //       window.clearViewCache();
  //       return await dispatch("getCurrentUser");
  //     } else {
  //       await dispatch("setJwtToken", "");
  //       await commit("SET_USER", {});
  //       try {
  //         let logoutUrl = rootState.sys.settings.logoutUrl;
  //         let siteBaseUrl = rootState.sys.settings.siteBaseUrl;
  //         if (logoutUrl.startsWith("/") || logoutUrl.startsWith("\\")) {
  //           logoutUrl = logoutUrl.substr(1);
  //         }
  //         if (siteBaseUrl.startsWith("/") || siteBaseUrl.startsWith("\\")) {
  //           siteBaseUrl = siteBaseUrl.substr(1);
  //         }
  //         if (logoutUrl.startsWith(siteBaseUrl)) {
  //           logoutUrl = logoutUrl.substr(siteBaseUrl.length);
  //         }
  //         if (logoutUrl.startsWith("\\")) {
  //           logoutUrl = logoutUrl.substr(1);
  //         }
  //         if (!logoutUrl.startsWith("/")) {
  //           logoutUrl = "/" + logoutUrl;
  //         }
  //         await request.post(logoutUrl);
  //         // eslint-disable-next-line no-empty
  //       } catch (e) {}
  //       await dispatch("setJwtToken", "");
  //       window.clearViewCache();
  //     }
  //   },
  //   /**
  //    * 模拟登录
  //    * @param {string} account
  //    */
  //   async simulate({ dispatch }, account) {
  //     let url = simulateLoginUrl.replace("{account}", account);
  //     await request.post(url);
  //     await dispatch("getCurrentUser");
  //   },
  //   async bingingUser({ state, commit, dispatch }, loginUser) {
  //     try {
  //       let respData = await request.post(bindingUserWithThirdParty, {
  //         ...loginUser,
  //         rememberMe: state.rememberMe
  //       });
  //       if (!respData || respData === "") {
  //         return false;
  //       }
  //       if (
  //         respData.content.httpcode &&
  //         respData.content.httpcode === 302 &&
  //         (respData.message == null || respData.message == "")
  //       ) {
  //         return {
  //           state: true,
  //           httpcode: respData.content.httpcode,
  //           redirect: respData.content.redirect
  //         };
  //       }
  //       let user = await dispatch("getCurrentUser");
  //       let token = respData.message;
  //       if (!user || user.redirect) {
  //         await dispatch("setJwtToken", "");
  //         return false;
  //       }
  //       await dispatch("setJwtToken", token);
  //       if (respData.content.redirect && respData.content.httpcode !== 200) {
  //         return {
  //           state: true,
  //           httpcode: respData.content.httpcode,
  //           redirect: respData.content.redirect
  //         };
  //       }
  //       return {
  //         state: true,
  //         user
  //       };
  //     } catch (err) {
  //       return { state: false, error: err.defaultMessage || err };
  //     }
  //   },
  //   async refreshToken({ dispatch }) {
  //     try {
  //       let respData = await request.get(refreshTokenUrl);
  //       if (!respData || respData === "") {
  //         return false;
  //       }
  //       if (respData.httpcode && respData.httpcode === 302 && (respData.message == null || respData.message === "")) {
  //         return {
  //           state: true,
  //           httpcode: respData.httpcode,
  //           redirect: respData.redirect
  //         };
  //       }
  //       let user = await dispatch("getCurrentUser");
  //       let token = respData.message;
  //       if (!user || user.redirect) {
  //         await dispatch("setJwtToken", "");
  //         return false;
  //       }
  //       await dispatch("setJwtToken", token);
  //       if (respData.redirect && respData.httpcode !== 200) {
  //         return {
  //           state: true,
  //           httpcode: respData.httpcode,
  //           redirect: respData.redirect
  //         };
  //       }
  //       return {
  //         state: true,
  //         user
  //       };
  //     } catch (err) {
  //       return { state: false, error: err.defaultMessage || err };
  //     }
  //   }
  // }
};
export default authentication;
